package com.xiaoshuidi.cloud.module.iot.enums;

import org.springframework.util.StringUtils;

/**
 * 银通物联数据推送数据类型
 *
 * @author wael
 * @since 2022.11.7
 */
public enum YinTongDataTypeEnum {
    METER_READ("METER_READ", "冷热水表、电表抄表结果推送"),
    OPEN_CLOSE("OPEN_CLOSE", "冷热水表、电表阀控操作结果推送"),
    //  与上一个数据类型区别 ；一个表示设备状态推送，一个表示指令执行结果，建议同时使用
    EXECUTE_RESULT("EXCUTE_RESULT", "指令执行结果回调"),
    // 若定时任务获取获取到数据有延迟，该推送为实时数据
    LOCK_BATTERY("LOCK_BATTERY", "门锁电量推送"),
    // 设备在线状态变更，接口是仅当设备状态发生变更后，才会进行推送，可以作为定时任务的补充
    DEV_ONLINE("DEV_ONLINE", "设备在线状态变更"),
    // 门锁开锁记录推送 水滴可以通过接口实时获取，不关注该消息推送
    LOCK_OPEN("LOCK_OPEN", "门锁开锁记录推送"),
    //   下发密码后，在规定时间内激活才可以使用该密码；当用户在规定时间内激活了密码或者到了规定时间仍没有激活密码，银通才会推送该消息
    LOCK_PWD_RESULT("LOCK_PWD_RESULT", "密码下发结果推送"),
    LOCK_WARNING_LOG("LOCK_WARNING_LOG", "门锁告警记录推送");
    private String dataTypeCode;
    private String dataTypeDesc;

    YinTongDataTypeEnum(String dataTypeCode, String dataTypeDesc) {
        this.dataTypeCode = dataTypeCode;
        this.dataTypeDesc = dataTypeDesc;
    }

    public String getDataTypeCode() {
        return dataTypeCode;
    }

    public String getDataTypeDesc() {
        return dataTypeDesc;
    }

    public static YinTongDataTypeEnum getInstanceByDataTypeCode(String dataTypeCode) {
        if (StringUtils.isEmpty(dataTypeCode)) {
            return null;
        }
        for (YinTongDataTypeEnum dataTypeEnum : values()) {
            if (dataTypeEnum.getDataTypeCode().equals(dataTypeCode)) {
                return dataTypeEnum;
            }
        }
        return null;
    }
}
